// 导出一个配置对象，用于 Jest 测试框架配置
module.exports = {
  // 定义模块文件扩展名，Jest 将这些文件视为模块
  moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],

  // 定义文件转换规则，Jest 使用这些转换器来处理不同类型的文件
  transform: {
    // 将 .vue 文件交给 vue-jest 处理
    '^.+\\.vue$': 'vue-jest',
    // 将样式文件和静态文件交给 jest-transform-stub 处理，这些文件通常不需要实际转换
    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
    // 将 .js 和 .jsx 文件交给 babel-jest 处理，以便支持 Babel 转换
    '^.+\\.jsx?$': 'babel-jest'
  },

  // 模块名映射规则，允许使用自定义路径别名
  moduleNameMapper: {
    // 将以 @/ 开头的导入路径映射到 <rootDir>/example 目录下
    '^@/(.*)$': '<rootDir>/example/$1'
  },

  // 定义快照序列化器，用于优化特定类型数据的快照输出
  snapshotSerializers: ['jest-serializer-vue'],

  // 匹配测试文件的路径模式
  testMatch: [
    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
  ],

  // 指定需要收集代码覆盖率的文件路径模式
  collectCoverageFrom: ['example/utils/**/*.{js,vue}', '!example/utils/axios.js', 'example/components/**/*.{js,vue}'],

  // 指定代码覆盖率报告的输出目录
  coverageDirectory: '<rootDir>/tests/unit/coverage',

  // 配置代码覆盖率报告的格式
  coverageReporters: [
    'lcov',
    'text-summary'
  ],

  // 设置测试时的全局 URL
  testURL: 'http://localhost/'
}
